package DAO;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

import Hibernate.HibernateUtil;
import Negocio.CuentaCorriente;

public class HibernateCuentaCorrienteDAO {
	
	private static HibernateCuentaCorrienteDAO instancia = null;
	private static SessionFactory sf = null;
	
	
	public static HibernateCuentaCorrienteDAO getInstancia(){
		if(instancia == null){
			instancia = new HibernateCuentaCorrienteDAO();
			sf = HibernateUtil.getSessionFactory();
		}
		return instancia;
	}
	
	public void grabarCtaCte(CuentaCorriente cc){
		try{
		Session session = sf.openSession();
		session.beginTransaction();
		session.persist(cc);
		session.flush();
		session.getTransaction().commit();
		session.close();
		}catch(Exception e){
			System.out.println(e);
			System.out.println("Error al grabar una Cuenta Corriente");
		}
	}
	
	public void updateCtaCte(CuentaCorriente cc){
		try{
		Session session = sf.openSession();
		session.beginTransaction();
		session.saveOrUpdate(cc);
//		session.flush();
		session.getTransaction().commit();
		session.close();
		}catch (Exception e){
			System.out.println(e);
            System.out.println("Error al actualizar la Cuenta Corriente");
		}
		
	}

	
	public CuentaCorriente getCtaCte(String id){
        try {
        	Session session=sf.openSession();
            session.beginTransaction();
//            Query q = session.createQuery("from CuentaCorriente cc left join cc.facturas f left join cc.recibos r where cc.numeroCuenta = ?").setString(0, id);
//            CuentaCorriente cc = (CuentaCorriente) q.uniqueResult();
            CuentaCorriente cc = (CuentaCorriente) session.get(CuentaCorriente.class,id);
    		cc.getFacturas().size();
    		cc.getRecibos().size();
            session.getTransaction().commit();
            session.close();
            return cc;
        } catch (Exception e){
            System.out.println(e);
            System.out.println("Error al cargar una Cuenta Corriente");
        }
        return null;
	}

}
